/**
 * 金牛座 - PostgreSQL数据库配置示例
 * 本配置文件展示了使用PostgreSQL数据库时的完整配置选项
 */
module.exports = {
    /**
     * 数据库配置
     * 指定数据库类型和连接信息
     */
    database: {
        // 数据库类型: 'postgres' 表示PostgreSQL数据库
        type: 'postgres',

        // 数据库连接信息
        connection: {
            host: 'localhost',           // 数据库主机名
            port: 5432,                  // PostgreSQL默认端口
            user: 'postgres',            // 数据库用户名
            password: 'your_password',   // 数据库密码
            database: 'your_database',   // 数据库名称
            schema: 'public',            // 默认Schema

            // 可选: SSL配置 (用于生产环境)
            ssl: {
                rejectUnauthorized: false  // 自签名证书可设置为false
            },

            // 可选: 连接池配置
            pool: {
                min: 2,                    // 最小连接数
                max: 10,                   // 最大连接数
                idleTimeoutMillis: 30000   // 连接空闲超时(毫秒)
            }
        },

        // 调试模式，设置为true时将输出SQL语句
        debug: false
    },

    /**
     * 表配置
     * 控制要包含或排除哪些表
     */
    tables: {
        // 需要包含的表 (使用正则表达式)
        include: [
            '.*'                        // 默认包含所有表
        ],

        // 需要排除的表 (使用正则表达式)
        exclude: [
            'pg_.*',                    // 排除PostgreSQL系统表
            'information_schema.*',     // 排除信息模式表
            '.*_temp',                  // 排除临时表
            '.*_log'                    // 排除日志表
        ],

        // 特定表的自定义属性
        custom: {
            // 用户表的自定义配置
            'users': {
                title: '用户信息',        // 表的显示标题
                description: '存储系统用户信息的主表', // 表描述
                displayField: 'username', // 表的显示字段
                ordering: 1,              // 表的显示顺序
                excludeFields: ['password', 'salt'] // 排除敏感字段
            },

            // 产品表的自定义配置
            'products': {
                title: '产品信息',        // 表的显示标题
                description: '存储所有产品的基本信息', // 表描述
                displayField: 'product_name', // 表的显示字段
                ordering: 2,              // 表的显示顺序

                // 自定义字段属性
                customFields: {
                    'price': {
                        label: '产品价格',    // 字段显示标签
                        description: '产品的实际销售价格(元)', // 字段描述
                        rules: 'required|numeric|min:0' // 验证规则
                    }
                }
            }
        }
    },

    /**
     * 输出配置
     * 控制生成的文件夹和文件
     */
    output: {
        // 基础输出目录
        baseDir: './output',

        // 文档输出目录 (相对于baseDir)
        docsDir: 'tables',

        // 类型定义输出目录 (相对于baseDir)
        typesDir: 'types',

        // 示例输出目录 (相对于baseDir)
        examplesDir: 'examples',

        // 是否清除输出目录
        clean: false,

        // 是否保留现有文件
        preserveFiles: true,

        // 是否创建目录
        createDirs: true
    },

    /**
     * 文档生成配置
     * 控制Markdown文档输出选项
     */
    docGeneration: {
        // 文档格式 (目前支持 'markdown')
        format: 'markdown',

        // 是否包含表的详细信息
        includeTableDetails: true,

        // 是否包含字段的详细信息
        includeFieldDetails: true,

        // 是否包含索引信息
        includeIndexes: true,

        // 是否包含表关系信息
        includeRelations: true,

        // 是否包含API示例
        includeAPIExamples: true,

        // 是否包含额外的表注释
        includeComments: true,

        // 表标题模板 (支持Handlebars语法)
        titleTemplate: '{{tableComment}} ({{tableName}})'
    },

    /**
     * 类型生成配置
     * 控制TypeScript类型定义生成
     */
    typeGeneration: {
        // 接口前缀
        interfacePrefix: 'I',

        // 是否使用字符串类型表示大整数
        useStringForBigInt: true,

        // 是否生成只读属性
        readonly: false,

        // 是否生成查询参数接口
        generateQueryInterfaces: true,

        // 是否生成分页结果接口
        generatePaginationInterfaces: true,

        // 是否生成常量定义
        generateConstants: true,

        // 是否生成API路径
        generateApiPaths: true,

        // 自定义类型映射 (PostgreSQL类型 => TypeScript类型)
        typeMapping: {
            // 数值类型
            'smallint': 'number',
            'integer': 'number',
            'bigint': 'string',  // 使用字符串避免精度问题
            'decimal': 'number',
            'numeric': 'number',
            'real': 'number',
            'double precision': 'number',
            'serial': 'number',
            'bigserial': 'string',

            // 字符类型
            'character': 'string',
            'character varying': 'string',
            'varchar': 'string',
            'text': 'string',

            // 日期/时间类型
            'timestamp': 'Date',
            'timestamp with time zone': 'Date',
            'date': 'Date',
            'time': 'string',
            'interval': 'string',

            // 布尔类型
            'boolean': 'boolean',

            // 二进制类型
            'bytea': 'Buffer',

            // JSON类型
            'json': 'any',
            'jsonb': 'any',

            // 数组类型
            '_varchar': 'string[]',
            '_text': 'string[]',
            '_int4': 'number[]',

            // 网络类型
            'cidr': 'string',
            'inet': 'string',
            'macaddr': 'string',

            // 几何类型
            'point': 'object',
            'line': 'object',
            'lseg': 'object',
            'box': 'object',
            'path': 'object',
            'polygon': 'object',
            'circle': 'object',

            // UUID类型
            'uuid': 'string'
        }
    },

    /**
     * 缓存配置
     * 控制数据缓存选项
     */
    cache: {
        // 是否启用缓存
        enabled: true,

        // 缓存目录
        cacheDir: '.cache',

        // 缓存生存时间(秒)
        ttl: 3600
    },

    /**
     * 日志配置
     * 控制日志输出
     */
    logging: {
        // 日志级别: 'debug', 'info', 'warn', 'error'
        level: 'info',

        // 是否在控制台输出
        console: true,

        // 是否记录到文件
        file: true,

        // 日志文件路径
        filePath: 'logs/jinniuzhuo.log',

        // 是否包含时间戳
        timestamp: true
    },

    /**
     * 性能配置
     * 控制生成性能选项
     */
    performance: {
        // 是否启用并发表处理
        concurrentTables: true,

        // 最大并发数
        maxConcurrent: 5,

        // 是否启用增量生成
        incrementalGeneration: true
    },

    /**
     * 高级配置
     * 自定义模板和扩展选项
     */
    advanced: {
        // 自定义模板目录
        templatesDir: 'my-templates',

        // 模板引擎 (默认: 'handlebars')
        templateEngine: 'handlebars',

        // HTTP API选项
        httpApi: {
            // 基础URL前缀
            baseUrl: '/jinniuzhuo/api',

            // 是否启用CORS
            cors: true,

            // 是否生成完整API文档
            generateSwagger: true,

            // Swagger文档输出路径
            swaggerPath: 'api-docs/swagger.json'
        },

        // 是否启用PostgreSQL特定功能
        postgresFeatures: {
            // 是否支持JSON操作符
            jsonOperators: true,

            // 是否支持全文搜索
            fullTextSearch: true,

            // 是否包含视图
            includeViews: true,

            // 是否支持触发器
            includeTriggers: false,

            // 是否支持物化视图
            includeMaterializedViews: false
        }
    }
}; 